/**
 * 
 */
package jmine.tec.report.metadata;

import java.util.EnumSet;

import jmine.tec.report.cell.DataCell;
import jmine.tec.report.chart.ChartType;
import jmine.tec.report.metadata.impl.UnmodifiableColumnMetaData;

/**
 * Versao modificavel de {@link ColumnMetaData}
 * 
 * @author takeshi
 * @version 21/08/2007
 */
public interface ModifiableColumnMetaData extends ColumnMetaData {

    /**
     * Adiciona um parametro a esta coluna, sobrescrevendo caso um parametro com o key passado ja exista.
     * 
     * @param key {@link String} a chave do parametro
     * @param label {@link String} o label do parametro
     * @param type {@link ParameterType} o tipo do parametro
     * @param reference o valor de referencia. Pode ser <code>null</code>
     * @return this
     */
    ModifiableColumnMetaData addParameter(String key, String label, ParameterType type, Object reference);

    /**
     * Adiciona um parametro a esta coluna, sobrescrevendo caso um parametro com o key passado ja exista.
     * 
     * @param param o {@link ParameterDefinition}
     * @return this
     */
    ModifiableColumnMetaData addParameterDefinition(ParameterDefinition param);

    /**
     * @param chartTypes the chartTypes to set
     */
    void setChartTypes(final EnumSet<ChartType> chartTypes);

    /**
     * @param exampleDataCell the exampleDataCell to set
     */
    void setExampleDataCell(final DataCell exampleDataCell);

    /**
     * Converts this {@link ModifiableColumnMetaData} into an {@link UnmodifiableColumnMetaData}.
     * 
     * @return {@link UnmodifiableColumnMetaData}
     */
    UnmodifiableColumnMetaData toUnmodifiable();

}
